Imports capaAccesoBD

Public Class MultiGrupo

    Public Shared Sub CrearCurso(ByVal pcodigo As String, ByVal pnombre As String, ByVal pesGrupal As Boolean)
        'HACK cambie el orden de coigo y nombre
        Dim dt As New capaAccesoBD.CrystalGradesDataSetTableAdapters.QueriesTableAdapter
        dt.sp_RegistrarCurso(pcodigo, pnombre, pesGrupal)


        Dim ds As New capaAccesoBD.CrystalGradesDataSet
        ds.AcceptChanges()
    End Sub

    Public Shared Sub ModificarCurso(ByVal pcodigo As String, ByVal pnombre As String, ByVal pid As String)
        Dim dt As New capaAccesoBD.CrystalGradesDataSetTableAdapters.QueriesTableAdapter

        dt.sp_ModificarCurso(pcodigo, pnombre, pid)
        Dim ds As New capaAccesoBD.CrystalGradesDataSet
        ds.AcceptChanges()

    End Sub

    Public Shared Sub EliminarCurso(ByVal pid As Integer)
        Dim dt As New capaAccesoBD.CrystalGradesDataSetTableAdapters.QueriesTableAdapter
        dt.sp_EliminarCurso(pid)
        Dim ds As New capaAccesoBD.CrystalGradesDataSet
        ds.AcceptChanges()
    End Sub

    Public Shared Function LevantarGrupos() As DataTable
        Dim dt As New capaAccesoBD.CrystalGradesDataSet.sp_LevantarGruposDataTable

        Dim qa As New capaAccesoBD.CrystalGradesDataSetTableAdapters.sp_LevantarGruposTableAdapter
        qa.Fill(dt)
        Return dt

    End Function

    'Public Shared Sub CrearGrupo(ByVal phorario As String, ByVal paula As String, ByVal pnumero As Integer, ByVal pcuatrimestre As String, ByVal pidcurso As String, ByRef listaProfesores As ArrayList)



    '    Dim dt As New capaAccesoBD.CrystalGradesDataSetTableAdapters.QueriesTableAdapter
    '    MsgBox(pidcurso)
    '    dt.sp_RegistarGrupo(False, phorario, paula, pnumero, pcuatrimestre, pidcurso)


    '    Dim ds As New capaAccesoBD.CrystalGradesDataSet
    '    ds.AcceptChanges()

    '    ''''''

    '    Dim dtSacarUltimoRegistro As New capaAccesoBD.CrystalGradesDataSet.sp_SacarUltimoRegistroDataTable
    '    Dim ultimoRegistro As New capaAccesoBD.CrystalGradesDataSetTableAdapters.sp_SacarUltimoRegistroTableAdapter
    '    ultimoRegistro.Fill(dtSacarUltimoRegistro)

    '    Dim codigo As Integer
    '    codigo = ultimoRegistro.GetData.Rows(0).Item(0)




    '    Dim codProfe As Integer
    '    For Each codProfe In listaProfesores
    '        dt.sp_RegistrarProfesorXGrupo(codProfe, codigo)
    '        ds.AcceptChanges()

    '    Next



    'End Sub

    'TODO si esto sirve hay que eliminar el sp_registrarGrupo y la funcion de la BD, y el codigo comentado de arriba :P
    'TODO esto deberia ser una funcion (teoria, ver diagrama nuevo JP)
    Public Shared Sub CrearGrupo(ByVal phorario As String, ByVal paula As String, ByVal pnumero As Integer, ByVal pcuatrimestre As String, ByVal pidcurso As String, ByRef listaProfesores As ArrayList)

        Dim esPrimerCurso As Boolean = False

        'primero: buscar ultimo grupo por curso sp_BuscarUltimoGrupoXCurso

        Dim dtUltimoGrupoXCurso As New capaAccesoBD.CrystalGradesDataSet.sp_BuscarUltimoGrupoXCursoDataTable
        Dim ultimoRegistroTA As New capaAccesoBD.CrystalGradesDataSetTableAdapters.sp_BuscarUltimoGrupoXCursoTableAdapter
        ultimoRegistroTA.Fill(dtUltimoGrupoXCurso, pidcurso)

        Dim codigoUltimo As Integer

        Try 'esto con excepciones, que diria tony?
            codigoUltimo = ultimoRegistroTA.GetData(pidcurso).Rows(0).Item(0)

        Catch ex As InvalidCastException
            esPrimerCurso = True

        End Try

        Dim planEvaluacion As ComponenteEvaluacion

        If (esPrimerCurso) Then
            planEvaluacion = MultiGrupo.CrearPlanNuevo() 'si es primer curso asigna plantilla
        Else
            Dim ultimoGrupo As Grupo = MultiGrupo.BuscarGrupo(codigoUltimo) 'si no, asignar plan del ultimo grupo
            planEvaluacion = ultimoGrupo.PlanEvaluacion()
        End If




        'segundo: registrar nuevo grupo

        Dim qdt As New CrystalGradesDataSetTableAdapters.QueriesTableAdapter()
        qdt.sp_RegistrarGrupoOO(False, phorario, paula, pnumero, pcuatrimestre, pidcurso)

        Dim ds As New CrystalGradesDataSet()
        ds.AcceptChanges()

        'tercero: asignar profesores
        Dim dtObtenerUltimo As New CrystalGradesDataSet.sp_SacarUltimoRegistroDataTable
        Dim ultimoGrupoTA As New CrystalGradesDataSetTableAdapters.sp_SacarUltimoRegistroTableAdapter
        ultimoGrupoTA.Fill(dtObtenerUltimo)

        Dim codigo As Integer = ultimoGrupoTA.GetData.Rows(0).Item(0)

        Dim codProfe As Integer
        For Each codProfe In listaProfesores
            qdt.sp_RegistrarProfesorXGrupo(codProfe, codigo)
            ds.AcceptChanges()

        Next

        'cuarto: instanciar el nuevo grupo registrado
        Dim grupoActual As Grupo = MultiGrupo.BuscarGrupo(codigo)

        'quinto: asignar plan de evaluacion
        grupoActual.PlanEvaluacion = planEvaluacion

        'return grupoActual    

    End Sub

    Public Shared Sub ModificarGrupo(ByVal phorario As String, ByVal paula As String, ByVal pnumero As Integer, ByVal pcuatrimestre As String, ByVal pidcurso As String, ByRef listaProfesores As ArrayList, ByVal pidGrupo As Integer)


        'segundo: registrar nuevo grupo

        Dim qdt As New CrystalGradesDataSetTableAdapters.QueriesTableAdapter()
        qdt.sp_ModificarGrupo(phorario, paula, pnumero, pcuatrimestre, pidcurso, pidGrupo)

        Dim ds As New CrystalGradesDataSet()
        ds.AcceptChanges()


    End Sub

    Public Shared Function LevantarCursos() As DataTable

        Dim listaCursos As New capaAccesoBD.CrystalGradesDataSetTableAdapters.sp_LevantarCursosTableAdapter

        Dim dt As New capaAccesoBD.CrystalGradesDataSet.sp_LevantarCursosDataTable

        listaCursos.Fill(dt)

        Return dt
    End Function

    Public Shared Function BuscarGrupo(ByVal codigoGrupo As Integer) As Grupo
        Dim grupo As Grupo

        Dim dtGrupo As New capaAccesoBD.CrystalGradesDataSetTableAdapters.sp_BuscarGrupoTableAdapter
        Dim dt As New capaAccesoBD.CrystalGradesDataSet.sp_BuscarGrupoDataTable
        dtGrupo.Fill(dt, codigoGrupo)
        Dim row As CrystalGradesDataSet.sp_BuscarGrupoRow = dt.Rows(0)

        grupo = New Grupo(codigoGrupo, row.idPlan)
        grupo.Horario = row.horario
        grupo.IsCerrado = row.estaCerrado
        grupo.Aula = row.aula
        grupo.NumeroCurso = row.numero
        grupo.Cuatrimestre = row.cuatrimestre

        Return grupo
    End Function

    Public Shared Sub ModificarEstado(ByVal codigoGrupo As Integer, ByVal estado As Boolean)

        Dim dTable As New CrystalGradesDataSetTableAdapters.QueriesTableAdapter
        dTable.sp_ModificarEstadoGrupo(codigoGrupo, estado)

        Dim ds As New capaAccesoBD.CrystalGradesDataSet
        ds.AcceptChanges()

    End Sub

    'Crea un plan plantilla si es la primera vez que se imparte el curso
    Private Shared Function CrearPlanNuevo() As ComponenteEvaluacion
        Dim planEval As ComponenteEvaluacion
        planEval = New RubroEvaluacion()




        Dim i1 As New RubroEvaluacion()
        i1.Nombre = "Item 1"
        i1.Porcentaje = 0

        Dim i2 As New RubroEvaluacion()
        i2.Nombre = "Item 2"
        i2.Porcentaje = 0

        Dim i3 As New RubroEvaluacion()
        i3.Nombre = "Item 3"
        i3.Porcentaje = 0

        Dim i4 As New RubroEvaluacion()
        i4.Nombre = "Item 4"
        i4.Porcentaje = 0

        'Dim examenII As New RubroEvaluacion()
        'examenII.Nombre = "II Parcial"
        'examenII.Porcentaje = 20

        'Dim examenIII As New RubroEvaluacion()
        'examenIII.Nombre = "III Parcial"
        'examenIII.Porcentaje = 30

        'Dim quices As New RubroEvaluacion()
        'quices.Nombre = "Quices"
        'quices.Porcentaje = 15

        'Dim tareas As New RubroEvaluacion()
        'tareas.Nombre = "Tareas Cortas"
        'tareas.Porcentaje = 15

        planEval.Add(i1)
        planEval.Add(i2)
        planEval.Add(i3)
        planEval.Add(i4)


        Return planEval
    End Function



End Class
